めがね901の運用環境・開発環境: マシン構成、ネットワーク構成
マシン構成
dishikari0:NICがインターネットに直接接続されているVPS。
ctama0(計画中):自宅にある物理マシン。NICがインターネットに直接接続されていない。
ctama1:自宅にある物理マシン。NICがインターネットに直接接続されていない。
dishikari0およびctama1ではDockerを用いて複数のサービスを運用している。 サービスごとにコンテナを立ち上げて運用している。
グローバルIPアドレスを1つしか有していない場合でも複数のサービスを運用できるようにリバースプロキシ(proxy)を運用している。 HTTPリクエストが届くと、そのHostヘッダーの値に応じてHTTPリクエストを他のコンテナに転送する。
proxyもDockerコンテナとして運用していて、ホストの80番ポート、443番ポート宛の通信をproxyに流すように設定している。他のコンテナはホストのポートでlistenしない。
各マシンを1つのVPNに所属させることで、どのマシンのサービスでも、dishikari0およびproxyを経由してアクセスすることができる。 実現方法
1. dishikari0にvpnserverをインストールして起動する。
2. vpnserverの仮想ハブにユーザーを追加し、各ユーザーにパスワードを設定する。
code:sh
sudo vpncmd localhost:<vpnserver> /SERVER /HUB:DEFAULT /CMD UserCreate dishikari0 /GROUP:none /REALNAME:none
sudo vpncmd localhost:<vpnserver> /SERVER /HUB:DEFAULT /CMD UserPasswordSet dishikari0
sudo vpncmd localhost:<vpnserver> /SERVER /HUB:DEFAULT /CMD UserCreate ctama1 /GROUP:none /REALNAME:none
sudo vpncmd localhost:<vpnserver> /SERVER /HUB:DEFAULT /CMD UserPasswordSet ctama1
3. dishikari0にvpnclientをインストールし、dishikari0内のvpnserverの仮想ハブに接続する。
code:sh
sudo vpncmd localhsot /CLIENT /CMD NicCreate vpnclient0
sudo vpncmd localhost /CLIENT /CMD AccountCreate dishikari0-vpn /SERVER:localhost:<vpnserverのポート番号> /HUB:DEFAULT /USERNAME:dishikari0 /NICNAME:vpnclient0
sudo vpncmd localhost /CLIENT /CMD AccountPasswordSet dishikari0-vpn /TYPE:standard
sudo vpncmd localhost /CLIENT /CMD AccountStartupSet dishikari0-vpn
sudo vpncmd localhost /CLIENT /CMD AccountConnect dishikari0-vpn
vpn_vpnclient0という仮想NICが作成されるので、netplanなどを使ってIPアドレス(例えば192.168.30.11)を振っておく。 4. ctama1にvpnclientをインストールし、dishikari0内のvpnserverの仮想ハブに接続する。
code:sh
sudo vpncmd localhsot /CLIENT /CMD NicCreate vpnclient0
sudo vpncmd localhost /CLIENT /CMD AccountCreate dishikari0-vpn /SERVER:<dishikari0のIPアドレス>:<vpnserverのポート番号> /HUB:DEFAULT /USERNAME:ctama1 /NICNAME vpnclient0
sudo vpncmd localhost /CLIENT /CMD AccountPasswordSet dishikari0-vpn /TYPE:standard
sudo vpncmd localhost /CLIENT /CMD AccountStartupSet dishikari0-vpn
sudo vpncmd localhost /CLIENT /CMD AccountConnect dishikari0-vpn
vpn_vpnclient0という仮想NICが作成されるので、netplanなどを使ってIPアドレス(例えば192.168.30.13)を振っておく。 5. dishikari0から192.168.30.13宛に通信するとctama1に流れるようになる。
2024/6/1以前に行っていた方法
https://gyazo.com/77bdd91eff72271355a8376fe5ebe959
リモートポート転送を使い、prod内のサービス(gtw-prod2dev)の80番ポート宛の通信を、devのproxy:80に流すようにしている。 実現方法
1. prod内にSSHサーバーのためのコンテナ(gtw-prod2dev)を立ち上げて、ホストの2224番ポートでlistenするように設定する。
2. リモートポート転送を使って、gtw-prod2dev:80宛の通信を、devのproxy:80に流す。
同様の方法で、自宅外からでもdev上のコードにアクセスできるように、gtw-prod2dev:2222宛の通信をdev:22に流している。したがって、gtw-prod2dev:2222にSSHするとdevにSSHできる。ただし、gtw-prod2dev:2222にSSHするためには、gtw-prod2dev:22(prod:2224)を踏み台(SSH)にする必要がある。 補足: 踏み台がないことは、自宅およびdevにとって危険である。踏み台がなくても済むようにホストのP番ポート宛の通信をgtw-prod2dev:2222に流す場合、ホストのP番ポート宛に大量のアクセスがあったとき、dev:22にそれがそのまま送り込まれることになり、自宅のネットワークの故障につながる。
注意: この記事に記載しているSSHのポート番号は、実際にmgn901.iconが使用しているポート番号とは異なります。